"""
    复习-mvc
        1. mvc架构
            m:多个数据封装为一个
            v:负责界面逻辑，输入输出
            c:负责核心业务逻辑
        2. 类变量
            model的唯一标识符使用类变量才能保持唯一性
        3. 私有化
            隐藏实现细节，对外提供必要功能
            为controller的列表提供只读属性
        4.重写
            直接打印，重写__str__
            排序，重写__lt__
            移除，重写__eq__
"""
class Model:
    """
        模型：多个数据合为一个数据
    """
    def __init__(self,data01=0,data02=0,data03=0):
        self.data01 = data01
        self.data02 = data02
        self.data03 = data03

    def __str__(self):
        return str(self.__dict__)

class View:
        """
            视图：负责界面逻辑，输入输出
        """
        def __init__(self):
            self.controller = Controller()

        def __display_menu(self):
            print("显示菜单")

        def __display_data(self):
            for item in self.controller.list_data:
                # 直接打印自定义对象，需要重写对象的__str__
                print(item.__dict__)

        def __input_data(self):
            # 录入多个信息
            model = Model()
            model.data01 = int(input("请输入第1个数据："))
            model.data02 = int(input("请输入第2个数据："))
            model.data03 = int(input("请输入第3个数据："))
            self.controller.add_data(model)

        def main(self):
            self.__display_menu()
            self.__input_data()

class Controller:
    """
        业务逻辑
    """
    start_id = 1001

    @classmethod
    def set_id(cls,new):
        new.data03 = Controller.start_id
        Controller.start_id += 1

    def __init__(self):
        self.__list_data = []
        # self.start_id = 1001

    @property
    def list_data(self):
        return self.__list_data

    def add_data(self,new):
        Controller.set_id(new)
        self.__list_data.append(new)

view = View()
view.main()